﻿using System;
using System.Diagnostics;
using System.Security.Principal;
using System.Windows.Forms;

namespace ServiceManager
{
    internal static class Program
    {
        private static void AdministratorRun()
        {
            /**
                * 当前用户是管理员的时候，直接启动应用程序
                * 如果不是管理员，则使用启动对象启动程序，以确保使用管理员身份运行
                */
            //获得当前登录的Windows用户标识
            WindowsIdentity identity = WindowsIdentity.GetCurrent();
            // 创建Windows 用户主题
            WindowsPrincipal principal = new WindowsPrincipal(identity);
            //判断当前登录用户是否为管理员
            if (principal.IsInRole(WindowsBuiltInRole.Administrator))
            {
                //如果是管理员，则直接运行
                Application.EnableVisualStyles();
                Application.SetCompatibleTextRenderingDefault(false);
                Application.Run(new Manager());
            }
            else
            {
                //创建启动对象
                ProcessStartInfo startInfo = new ProcessStartInfo
                {
                    FileName = Application.ExecutablePath,
                    Arguments = string.Join(" ", ""),
                    Verb = "runas"
                };
                //设置运行文件
                //设置启动参数
                //设置启动动作,确保以管理员身份运行
                //如果不是管理员，则启动 UAC
                Process.Start(startInfo);
                Application.Exit();
            }
        }

        /// <summary>
        ///     The main entry point for the application.
        /// </summary>
        [STAThread]
        private static void Main()
        {
            //Application.EnableVisualStyles();
            //Application.SetCompatibleTextRenderingDefault(false);
            //Application.Run(new Manager());
            AdministratorRun();
        }
    }
}